const CompressionPlugin = require('compression-webpack-plugin')
const UselessFile = require('useless-files-webpack-plugin')
const path = require('path')
const externals = {
    'vue': 'Vue',
    'vue-router': 'VueRouter',
    'vuex': 'Vuex',
    'axios': 'axios',
    'dayjs': 'dayjs',
    'echarts': 'echarts'
}
const cdn = {
    css: [],
    js: [
        'https://cdn.jsdelivr.net/npm/vue@2.5.17/dist/vue.min.js',
        'https://cdn.jsdelivr.net/npm/vue-router@3.0.1/dist/vue-router.min.js',
        'https://cdn.jsdelivr.net/npm/vuex@3.0.1/dist/vuex.min.js',
        'https://cdn.jsdelivr.net/npm/axios@0.18.0/dist/axios.min.js',
        'https://cdn.bootcdn.net/ajax/libs/dayjs/1.10.4/dayjs.min.js',
        'https://cdn.bootcdn.net/ajax/libs/echarts/4.0.0/echarts.simple.min.js'
    ]
}
// https://cdn.bootcdn.net/ajax/libs/echarts/4.0.0/echarts.min.js

module.exports = {
    //去除生产环境的productionSourceMap
    productionSourceMap: false,

    chainWebpack: config => {
        // 删除多余的文件
        config.plugin('useless-files-webpack-plugin')
            .use(
                new UselessFile({
                    root: path.resolve(__dirname, './src/assets/images'),
                    clean: true,
                    exclude: /node_modules/
                })
            )
        // 去除console
        config
            .plugin('uglifyjs-plugin')
            .use('uglifyjs-webpack-plugin', [{
                uglifyOptions: {
                    warnings: false,
                    compress: {
                        drop_console: true,
                        drop_debugger: false,
                        pure_funcs: ['console.log']
                    }
                }
            }])
            .end()
        // // ============压缩图片 start============
        // config.module
        //     .rule('min-image')
        //     .test(/\.(png|jpe?g|gif)(\?.*)?$/)
        //     .use('image-webpack-loader')
        //     .loader('image-webpack-loader')
        //     .options({ disable: process.env.NODE_ENV == 'development' ? true : false })//此处为ture的时候不会启用压缩处理,目的是为了开发模式下调试速度更快,网上错误示例直接写为disable:true,如果不去查看文档肯定是要被坑的
        //     .end()

        // config.module
        //     .rule('images')
        //     .use('image-webpack-loader')
        //     .loader('image-webpack-loader')
        //     .options({ bypassOnDebug: true })
        //     .end()
        // // ============压缩图片 end============

        // 优化对比可视化工具
        config
            .plugin('webpack-bundle-analyzer')
            .use(require('webpack-bundle-analyzer').BundleAnalyzerPlugin)

        // CDN
        config.plugin('html').tap(args => {
            if (process.env.NODE_ENV === 'production') {
                args[0].cdn = cdn
            }
            console.log(999,args,process.env.NODE_ENV);
            return args
        })
        // 移除 prefetch 插件
        config.plugins.delete('prefetch')
        // 移除 preload 插件
        config.plugins.delete('preload');
    },
    configureWebpack: config => {
        if (process.env.NODE_ENV === 'production') {
            return {
                externals: externals,
                // plugins: [
                //     //gzip压缩
                //     new CompressionPlugin({
                //         test: /\.js∣¨E92E.html|\.html∣¨E92E.html|.\css/, //匹配文件名
                //         threshold: 10240, //对超过10k的数据压缩
                //         deleteOriginalAssets: false //不删除源文件
                //     })
                // ],
                performance: {
                    hints: false
                },
                plugins: [
                    new CompressionPlugin({
                        algorithm: 'gzip', // 使用gzip压缩
                        test: /\.js$|\.html$|\.css$/, // 匹配文件名
                        filename: '[path].gz[query]', // 压缩后的文件名(保持原文件名，后缀加.gz)
                        minRatio: 1, // 压缩率小于1才会压缩
                        threshold: 10240, // 对超过10k的数据压缩
                        deleteOriginalAssets: false, // 是否删除未压缩的源文件，谨慎设置，如果希望提供非gzip的资源，可不设置或者设置为false（比如删除打包后的gz后还可以加载到原始资源文件）
                    }),
                    // 压缩js、html、css
                    new CompressionPlugin({
                        test: /\.js$|\.html$|.\css/, // 匹配文件名
                        threshold: 10240, // 对超过10k的数据压缩
                        deleteOriginalAssets: false // 不删除源文件
                    })
                ],
            };
        }
    },
}